0%

Docker Compose

Docker Compose

docker-compose是一个Docker容器的管理工具集,可以很方便的创建和重建容器、执行启动和停止容器等操作

docker-compose常用命令

查看版本

1
docker-compose --version

创建或重建、启动容器

1
docker-compose --up

删除停止运行的所有容器

1
docker-compose --rm

启动所有容器

1
docker-compose --start

停止所有容器

1
docker-compose --stop

列出运行的容器列表

1
docker-compose --ps

查看正在运行的容器的输出日志

1
docker-compose --logs

查看统一服务运行的容器个数

1
docker-compose --scale

执行命令

1
docker-compose --run

docker-compose配置文件

核心就是docker-compose.yml,上述命令需要在该文件所在目录下执行

配置

build

配置构建时的选项,会利用它进行自动构建镜像

可以是一个路径,如

1
build: ./dir

也可以是一个对象,用于指定Dockerfile和参数,如

1
2
3
4
5
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
command

覆盖容器启动后默认执行的命令,如

1
command: redis-server /home/redis/redis.conf
dns

配置dns服务器

1
2
3
4
dns: 8.8.8.8 #单值
dns: # 集合
- 8.8.8.8
- 9.9.9.9

配置DNS的搜索域

1
2
3
4
dns_search: zhhll.icu #单值
dns: # 集合
- dc1.zhhll.icu
- dc2.zhhll.icu
environment

环境变量设置

1
2
3
environment:
MYSQL_DATABASE: 'study'
MYSQL_ROOT_PASSWORD: password
env_file

从文件中获取环境变量,该env_file中的路径是Compose文件所在目录的相对路径

1
2
3
4
5
env_file: .env  # 单值

env_file: #集合
- ./common.env
- ./apps/web.env
expose

暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机

1
2
3
expose:
- "8080"
- "8081"

连接到docker-compose.yml外部的容器

1
2
3
external_links:
- db_1:mysql
- db_1:redis
image

指定镜像名或镜像id,如果本地不存在该镜像,Compose会尝试下载该镜像

1
image: java

连接到其他服务的容器,可以指定服务名称和服务别名,也可以只指定服务名称

1
2
3
4
web:
links:
- redis # 只指定服务名称
- db:database #指定服务名称和别名
network_mode

设置网络模式

1
network_mode: "bridge"
ports

暴露端口信息,可以指定范围

1
2
3
4
ports:
- "3000"
- "3000-3005"
- "8080:8080"
volumes

数据卷挂在路径,可以设置宿主主机路径(HOST:CONTAINER),也可以指定访问模式(HOST:CONTAINER:ro)

1
2
3
4
5
volumes:
- /var/lib/mysql
- /opt/data:/var/lib/mysql #绝对路径
- ./cache:/tmp/cache # 相对路径,相对于该yml的路径
- datavolume:/var/lib/mysql
volumes_from

从另一个服务或容器挂载数据卷,可指定只读(ro)或者读写(rw),默认是读写

1
2
3
volumes_from:
- service_name:ro
- container:container_name

完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
version : '3.8' #docker-compose的版本
services: # 配置服务
nacos: # 服务的命名,给配置人员看的
container_name: nacos # 容器名称
image: study/nacos/nacos-server:2 # 使用的镜像
build:
context: ./nacos
environment:
- MODE=standalone
volumes: # 数据卷映射
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
depends_on: # 依赖服务,需要先启动依赖服务
- mysql
mysql:
container_name: mysql
image: study/mysql:5
restart: always
build:
context: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1',
'--default-authentication-plugin=mysql_native_password'
] # 启动命令
environment:
MYSQL_DATABASE: 'study'
MYSQL_ROOT_PASSWORD: password
redis:
container_name: redis
image: study/redis
build:
context: ./redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/home/redis/redis.conf
- ./redis/data:/data
command: redis-server /home/redis/redis.conf
nginx:
container_name: nginx
image: study/nginx
restart: always
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/html/dist:/home/work/www/study
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d

欢迎关注我的其它发布渠道